#pragma once
#include "List.h"
#include "List.cpp"
#include "Vector.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string>
#include <iostream>
using namespace std;

//template<class T,class container>
template<class T,template<class> class container=Vector>
//模板的模板参数，用于和前面的T泛型来保持统一
//并且这里Stack将其缺省值给Vector
class Stack
{
public:
    void Push(const T &x);
    void Pop();
    bool Top(T & tmp);
    size_t Size();
    bool Empty();
    void Display();
protected:
    container<T> _con;//这里要用T来指定类型
};
//template<class T,class container>
template<class T,template<class> class container=List>
//模板的模板参数，用于和前面的T泛型来保持统一
//并且这里Queue将其缺省值给List,便于头删
class Queue
{
public:
    void Push(const T &x);
    void Pop();
    bool Front(T &tmp);
    size_t Size();
    bool Empty();
    void Display();
protected:
    container<T> _con;
};
